HAL库 ADC超详细(查询、中断、DMA)

您所在的位置:网站首页 pic16F1824 配置 HAL库 ADC超详细(查询、中断、DMA)

HAL库 ADC超详细(查询、中断、DMA)

2024-03-18 17:41| 来源: 网络整理| 查看: 265

一、ADC的三种工作方式及优缺点

1.查询模式:查询模式下,占用CUP时间较多,cup效率较低。

2.中断模式:相比查询模式大大释放了cup,提高了cup的利用率。

3.DMA模式:该模式下基本不占用cup,能直接将ADC采集的数据存储到存储器。

二、ADC的转换方式

      转换方式需要根据情况搭配使用,分为扫描模式(Scan Conversion mode)、连续转换模式(Continuous Conversion Mode)和间断模式(Discontinuous Conversion Mode)。

ADC单通道转换:

  “单次转换模式,扫描模式关闭”:只进行一次转换,不过可以持续使能ADC达到不断采集的的。

  “连续转换模式,扫描模式关闭”:使能一次ADC后,能够连续转换。

ADC多通道转换:

 “单次转换模式”,扫描模式开启”:每个通道转换完一次后结束转换,但可以通过持续使能ADC不断进行多通道连续采集。

 “连续转换模式”,扫描模式开启”:每个通道转换完之后还能继续循环转换,不需要反复使能ADC。

  多通道必须开启扫描模式。

三、ADC之查询模式(阻塞模式) 1、流程:

①开启ADC:调用HAL_ADC_Start(),开启ADC。

②等待EOC标志位:调用查询函数HAL_ADC_PollForConversion(),等待ADC转化结束,CUP在这段时间内不能干其他事,所以查询方式降低了CUP的使用率。

③读取寄存器数据:调用HAL_ADC_GetValue()。

2、STM32CUBEMX配置(ADC部分)

   使用的stm32f103zet6正点原子精英版,通过打开ADC1的通道1(PA1)。

 

Data Alignment : 可选左对齐或右对齐。

Conversion Mode:由于只使用了一个通道,关闭就行。

Continuous Conversion Mode:这里关闭,我们使用软件开启ADC。

Discontinuous Conversion Mode:单通道模式间断模式自动关闭,不可选。

Enable Regular Conversions:是否使能转换,开启规则转换。

Number Of Conversion:转换的通道数,单通道当然只能是1。

External Trigger Conversion Source:选择由软件触发采集。

Rank :每个通道的编号,

      每个Rank有如下参数配置:

      Channel:所选择的通道

      Sampling Time:每次采集ADC所需要的时间(采样周期),T = 采样周期 + 12.5个周期,(其中1周期为1/ADCCLK,设置的ADC时钟频率为12M),这里我设置的ADC的采样周期 为1.5Cycles,所以转化一次总的时间T=(1.5+12.5)/12=1.167us。补充:采样周期越长,越准确,这里存在一个竞争冒险的关系。

3、软件配置

在adc.h文件添加代码:

/* USER CODE BEGIN 1 */ 获取ADC的值 uint16_t Get_adc(uint16_t ch) { HAL_ADC_Start(&hadc1); //先开启ADC HAL_ADC_PollForConversion(&hadc1,1);//查询函数,查询EOC标志位。每次采样,CUP在这里都要 //等待采样完成才能进行下一步,这段时间CUP没有干其他 //事,所以降低了CUP使用率 return HAL_ADC_GetValue(&hadc1); //得到ADC的值 } /获取times次采样值的平均值/// uint16_t Get_ADC_Average(uint16_t ch,uint8_t times) { uint32_t ADC_Sum=0; uint8_t i; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3